Date : 15 d�cembre 1990
Programme : HEAVY METAL
Protection : Mot de passe
Fichier : METAL.EXE
Outils : PERISCOPE, Carte PANO, QUAID ANALYSER.
Temps pass� : 2h
Divers : PERISCOPE charg� � 1979:0000
Soci�t� :
Origine : INDONESIE
Num�ro : 045
Programme d�plomb� � moiti�, c'est � dire que l'on peut y jouer
sans indiquer de mot de passe mais l'affichage des scores ne se
fait pas en fin de partie, seulement dans la partie en cours.
Et �galement la pr�sentation est shunt�e, mais �a c'est un moindre
mal. Il faut noter toutefois que si l'on rentre le bon mot de passe
le programme fonctionne toujours...
A la demande du mot de passe se placer successivement sur l'INT21 et
l'INT16 pour voir si l'une des deux est utilis�e pour l'entr� des
caract�res. OK c'est l'INT16.
Taper G {SS:SP} pour se trouver � la sortie puis faire une recherche
de test de la touche ENTER dans le SEGMENT courant;
S CS:0 FFFF 3C 0D. ---> 3C 0D = CMP AL,0D
Trois endroits apparaissent:
34B3:091B
34B3:2501
34B3:2BF7
En se pla�ant sur le premier, il s'av�re que c'est le bon. Le suivre
jusqu'� se que l'on arrive au saut list� ci-dessous et inverser le
saut.
34B3:0782 7518 JNZ 079C ; jump
34B3:0784 C706AC5D0000 MOV WORD PTR [5DAC],0000
34B3:078A E833FC CALL 03C0
34B3:078D 833EDE1104 CMP WORD PTR [11DE],+04
34B3:0792 7407 JZ 079B
34B3:0794 8E06CD11 MOV ES,[11CD]
34B3:0798 E801FC CALL 039C
34B3:079B C3 RET
C'est tout bon, CTRL ALT DEL pour sortir rapidement et lancer PCTOOLS
pour figer la modification.
Et l� surprise ( mais cel� ne m'�tonne qu'� moiti� ) la chaine est
introuvable dans METAL.EXE et il n'y a pas d'OVL. A tout hazard je
recherche tout le r�pertoire, sans r�sultat.
Je lance QUAID pour avoir confirmation ; effectivement METAL.EXE
ne se sert d'aucun overlay ni d'un fichier quelconque � cet endroit l�.
"Ils" sont plus rus�s que je ne le pensait, cette partie de code est
lu quelque part et plac�e l� une fois le programme ayant d�marr�.
Si on ne trouve pas la chaine d'octets c'est qu'elle est soit
dispers�e sur le disque ou cod�e par un OU EXCLUSIF. Ce sont les
deux m�thodes les plus employ�es. Voir 35MM.DEP et RF.DEP
Probl�me: comment rep�rer l'endroit d'ou sont tir�s les octets ?
PERISCOPE offre des commandes pour s'arr�ter lorsqu'une position
d�termin� est lu ou �crite. Mais ce dernier ne s'arr�te pas toujours.
C'est le moment de tester l'arret sur adresse en �criture de ma carte
PANO. Je place donc CS:IP � 34B3:0782 ( adresse paire; c'est
magnifique ) et le switch READ/WRITE sur WRITE.
Je lance et... l'�cran de PERISCOPE s'affiche d�s le d�but du programme
bien avant la demande du type de moniteur.
Je me retrouve dans la boucle ci-dessous:
Et par simple curiosit� je vais voir en 34B3:0782; tout ce qui est
avant 782 correspond au code et tout ce qui suit est n'importe quoi.
A partir de l� je fais du pas � pas, et lorsque je vois mon 75 arriver
avec l'instruction LODSW je sais que c'est gagn�.
Il suffit de faire un DUMP de la chaine pointer par LODSW pour trouver
l'endroit ou est stock� 75.
9CB0:0350 D1E8 SHR AX,1
9CB0:0352 D1E8 SHR AX,1
9CB0:0354 D1E8 SHR AX,1
9CB0:0356 D1E8 SHR AX,1
9CB0:0358 46 INC SI
9CB0:0359 BA5E03 MOV DX,035E
9CB0:035C EB09 JMP 0367
9CB0:035E AD LODSW
9CB0:035F 86E0 XCHG AL,AH
9CB0:0361 80E40F AND AH,0F
9CB0:0364 BA4C03 MOV DX,034C
9CB0:0367 3D0001 CMP AX,0100
Je m'interresse donc particuli�rement au deux octets 75 et 18 JNZ 79C
que je voudrait remplacer par deux NOP. En fait il suffit de faire
un saut avec un d�placement �gale � ZERO pour avoir le m�me r�sultat.
Donc transformer l'octet 18 en 00. JNZ 784 ( 79Ch - 18h = 784h )
Je continue mon pas � pas pour attendre le passage du 18. Celui-ci
viens de DS:0C97. DS=8C84.
Methode pratique, chercher la chaine 40181E71B60330FC54 et changer
18 par 00.
FREDDY
|